import os
import argparse
from typing import Dict, Any

# 多环境配置
ENVIRONMENTS = {
    'dev': {
        'RABBITMQ_CONFIG': {
            'host': '192.168.192.94',
            'port': 5672,
            'username': 'guest',
            'password': 'guest',
            'queue_prefix': 'dev_',
        },
        'MYSQL_CONFIG': {
            'host': 'rm-uf6qur2684v3xrx6bjo.mysql.rds.aliyuncs.com',
            'port': 3306,
            'username': 'flask_pytorch',
            'password': 'mz4hguRLcrqd',
            'database': 'flask_pytorch',
        },
        'REDIS_CONFIG': {
            'host': 'localhost',
            'port': 6379,
            'password': None,
            'db': 0,
        },
        'DEBUG': True,
        'LOG_LEVEL': 'DEBUG',
        'MULTI_TASK_MODEL_PATH': 'D:\\github\\flask_pytorch_models\\classfy_model_end.pth',
        'MULTI_TASK_DATA_PATH': 'multi_task/multi_task_sample1.npy',
    },
    'test': {
        'RABBITMQ_CONFIG': {
            'host': '192.168.192.94',
            'port': 5672,
            'username': 'guest',
            'password': 'guest',
            'queue_prefix': 'test_',
        },
        'MYSQL_CONFIG': {
            'host': 'rm-uf6qur2684v3xrx6b.mysql.rds.aliyuncs.com',
            'port': 3306,
            'username': 'flask_pytorch',
            'password': 'mz4hguRLcrqd',
            'database': 'flask_pytorch',
        },
        'REDIS_CONFIG': {
            'host': 'test-redis.example.com',
            'port': 6379,
            'password': 'test_redis_password',
            'db': 1,
        },
        'DEBUG': True,
        'LOG_LEVEL': 'INFO',
        'MULTI_TASK_MODEL_PATH': '/files/classfy_model_end.pth',
        'MULTI_TASK_DATA_PATH': 'multi_task/multi_task_sample1.npy',
    },
    'prod': {
        'RABBITMQ_CONFIG': {
            'host': 'prod-rabbitmq.example.com',
            'port': 5672,
            'username': 'prod_user',
            'password': 'prod_password',
            'queue_prefix': 'prod_',
        },
        'MYSQL_CONFIG': {
            'host': 'prod-db.example.com',
            'port': 3306,
            'username': 'prod_user',
            'password': 'prod_password',
            'database': 'flask_pytorch_prod',
        },
        'REDIS_CONFIG': {
            'host': 'prod-redis.example.com',
            'port': 6379,
            'password': 'prod_redis_password',
            'db': 0,
        },
        'DEBUG': False,
        'LOG_LEVEL': 'WARNING',
        'MULTI_TASK_MODEL_PATH': 'E:\\github\\flask_pytorch_models\\classfy_model_end.pth',
        'MULTI_TASK_DATA_PATH': 'multi_task/multi_task_sample1.npy',
    }
}

def get_active_environment() -> str:
    """
    获取当前激活的环境
    优先级：命令行参数 > 环境变量 > 默认值(dev)
    """
    # 1. 检查命令行参数
    parser = argparse.ArgumentParser(description='Flask PyTorch Application')
    parser.add_argument('--active', 
                       choices=['dev', 'test', 'prod'], 
                       default=None,
                       help='指定运行环境 (dev/test/prod)')
    
    # 解析已知参数，避免与应用程序的其他参数冲突
    args, _ = parser.parse_known_args()
    if args.active:
        return args.active
    
    # 2. 检查环境变量
    env_from_env = os.getenv('FLASK_ENV', '').lower()
    if env_from_env in ENVIRONMENTS:
        return env_from_env
    
    # 3. 默认返回dev环境
    return 'dev'

def get_config(env: str = None) -> Dict[str, Any]:
    """
    获取指定环境的配置
    
    Args:
        env: 环境名称，如果为None则自动检测
    
    Returns:
        配置字典
    """
    if env is None:
        env = get_active_environment()
    
    if env not in ENVIRONMENTS:
        raise ValueError(f"不支持的环境: {env}. 支持的环境: {list(ENVIRONMENTS.keys())}")
    
    return ENVIRONMENTS[env]

# 获取当前激活环境的配置
ACTIVE_ENV = get_active_environment()
CONFIG = get_config(ACTIVE_ENV)

# 为了向后兼容，保留原有的配置变量名
RABBITMQ_CONFIG = CONFIG['RABBITMQ_CONFIG']
MYSQL_CONFIG = CONFIG['MYSQL_CONFIG']
REDIS_CONFIG = CONFIG['REDIS_CONFIG']
DEBUG = CONFIG['DEBUG']
LOG_LEVEL = CONFIG['LOG_LEVEL']

# 导出配置信息
__all__ = [
    'ENVIRONMENTS',
    'get_active_environment', 
    'get_config',
    'ACTIVE_ENV',
    'CONFIG',
    'RABBITMQ_CONFIG',
    'MYSQL_CONFIG', 
    'REDIS_CONFIG',
    'DEBUG',
    'LOG_LEVEL'
] 
